home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / cat / catopts2.i < prev    next >
Text File  |  1997-10-26  |  38KB  |  1,019 lines

  1. IMPLEMENTATION MODULE CatOpts2;
  2.  
  3. (*==============================================================*
  4.  * Modul:               CAT Optionenmodul, zweiter Teil         *
  5.  * Autor:               Dirk Steins                             *
  6.  * erstellt am:         18.7.1995                               *
  7.  * letzte Žnderung am:  18.7.1995                               *
  8.  * Version:             0.1                                     *
  9.  * Interne Version:     V#0001                                  *
  10.  *==============================================================*
  11.  
  12.  *----------------------------------------------------------------------------
  13.  * Datum    Vers. Autor  Žnderung (Arbeitsbericht)
  14.  *----------------------------------------------------------------------------
  15.  * 10.12.93 0.1   DS     Erste Implementation erstellt
  16.  *                       einige Optionsdialoge aus CATOPTS.M hierhin verschoben
  17.  *----------------------------------------------------------------------------
  18.  *)
  19.  
  20. FROM SYSTEM IMPORT ADDRESS, ADR, TSIZE;
  21.  
  22. (* MM2-Module *)
  23. IMPORT Block;
  24. IMPORT Strings;
  25. IMPORT StrConv;
  26. FROM Storage    IMPORT ALLOCATE, DEALLOCATE;
  27.  
  28. (* Magic-Module *)
  29. IMPORT MagicStrings, MagicAES;
  30. IMPORT mtUtils, mtDials, mtAlerts, mtDir, mtPopups, mtAppl,
  31.        mtTextfiles;
  32.  
  33. IMPORT WinDials;
  34.  
  35. (* CAT-Module *)
  36. IMPORT CatFiles;
  37. IMPORT CatTypes;
  38. IMPORT CatGlobal;
  39. IMPORT WdwManager;
  40. IMPORT ConvertDate;
  41. IMPORT dataSys;
  42. IMPORT MausTauschrsc;
  43. IMPORT MTE;
  44. IMPORT CatEdit;
  45. IMPORT grin;
  46. IMPORT CatHelp;
  47. IMPORT VDIUtil;
  48. IMPORT ConfVars;
  49. IMPORT Varnames;
  50. IMPORT MTPaths;
  51. IMPORT IoFilter;
  52. IMPORT ShellCall;
  53. IMPORT ListHelp;
  54.  
  55. FROM Void   IMPORT v;
  56.  
  57. (* Konstantendefinitionen *)
  58. CONST   CR      = 15C;
  59.         LF      = 12C;
  60.  
  61. (* Typdefinitionen *)
  62.  
  63. TYPE Trick =  POINTER TO RECORD
  64.                 CASE : BOOLEAN OF
  65.                   TRUE:  wert: INTEGER;|
  66.                   FALSE: hi: CHAR;
  67.                          lo: CHAR;|
  68.                 END;
  69.               END;
  70.  
  71.  
  72. PROCEDURE buildVarName (REF name: ARRAY OF CHAR; number: INTEGER; VAR newName: ARRAY OF CHAR);
  73. BEGIN
  74.   MagicStrings.Assign (name, newName);
  75.   MagicStrings.Append (StrConv.IntToStr (number, 0), newName);
  76. END buildVarName;
  77.  
  78.  
  79.  
  80. TYPE floskelArray =  ARRAY [1..20] OF ARRAY[0..511] OF CHAR;
  81.  
  82.      floskelInfo = RECORD
  83.                      txtArray : POINTER TO floskelArray;
  84.                      oldEntry : INTEGER;
  85.                      oldControl: BOOLEAN;
  86.                      theWdw   : INTEGER;
  87.                    END;
  88.     floskelPtr = POINTER TO floskelInfo;
  89.     
  90.   PROCEDURE SetEntry (tree: ADDRESS; floskel : floskelPtr;
  91.                       idx : INTEGER; isControl : BOOLEAN);
  92.     VAR i       : INTEGER;
  93.         str     : ARRAY  [0..1023] OF CHAR;
  94.         strIdx    : INTEGER;
  95.   BEGIN
  96.     strIdx := idx - MausTauschrsc.fl_f1 + 1;
  97.     IF isControl THEN INC (strIdx, 10) END;
  98.     (* Suchen nach einzelnen LFs und ersetzen davon *)
  99.     Strings.Assign (floskel^.txtArray^[strIdx], str, v.bool);
  100.     i := 0;
  101.     WHILE i >= 0 DO
  102.       i := Strings.Pos (LF, str, i);
  103.       IF i >= 0
  104.       THEN
  105.         Strings.Delete (str, i, 1, v.bool);
  106.       END;
  107.     END;
  108.     CatGlobal.SetStrings (tree, MausTauschrsc.flline1, MausTauschrsc.flline6, str);
  109.   END SetEntry;
  110.   
  111.   PROCEDURE GetEntry (tree: ADDRESS; floskel : floskelPtr;
  112.                       idx : INTEGER; isControl : BOOLEAN);
  113.     VAR i       : INTEGER;
  114.         str     : ARRAY  [0..1023] OF CHAR;
  115.         strIdx  : INTEGER;
  116.   BEGIN 
  117.     strIdx := idx - MausTauschrsc.fl_f1 + 1;
  118.     IF isControl THEN INC (strIdx, 10) END;
  119.     CatGlobal.GetStrings (tree, MausTauschrsc.flline1, MausTauschrsc.flline6, floskel^.txtArray^[strIdx]);
  120.     i := 0; 
  121.     (* Suchen nach einzelnen CRs und diese ersetzen durch Cr/LF *)
  122.     Strings.Assign (floskel^.txtArray^[strIdx], str, v.bool);
  123.     WHILE i >= 0 DO
  124.       i := Strings.Pos (CR, str, i);
  125.       IF i >= 0
  126.       THEN
  127.         IF str[i+1] # LF
  128.         THEN
  129.           Strings.Insert (LF, i+1, str, v.bool);
  130.         END;
  131.         INC (i);
  132.       END;
  133.     END;
  134.     (* Suchen nach einzelnen LFs und ersetzen davon *)
  135.     i := 0;
  136.     WHILE i >= 0 DO
  137.       i := Strings.Pos (LF, str, i);
  138.       IF i >= 0
  139.       THEN
  140.         IF (i=0) OR ((i > 0) & (str[i-1] # CR))
  141.         THEN
  142.           Strings.Insert (CR, i, str, v.bool);
  143.         END;
  144.         INC (i);
  145.       END;
  146.     END;
  147.     (* Jetzt nur noch in Textarray sichern *)
  148.     Strings.Assign (str, floskel^.txtArray^[strIdx], v.bool);
  149.   END GetEntry;
  150.  
  151. PROCEDURE floskelButton (tree: ADDRESS; private: ADDRESS; button: INTEGER;
  152.                          mx, my : INTEGER; kstate: BITSET; clicks: INTEGER): BOOLEAN;
  153.   VAR   floskel : floskelPtr;
  154.         but     : INTEGER;
  155.         isControl: BOOLEAN;
  156.         strPtr  : CatTypes.Str1023Ptr;
  157.         strLen  : LONGCARD;
  158. BEGIN
  159.   floskel := private;
  160.   but := INTEGER(BITSET(button) - {15});
  161.   CASE but OF
  162.     MausTauschrsc.fl_f1..MausTauschrsc.fl_f10 :
  163.       GetEntry (tree, floskel, floskel^.oldEntry, floskel^.oldControl);
  164.       isControl := mtUtils.InState (tree, MausTauschrsc.fl_contrl, MagicAES.SELECTED);
  165.       SetEntry (tree, floskel, but, isControl);
  166.       floskel^.oldControl := isControl;
  167.       floskel^.oldEntry   := but; 
  168.       WinDials.WinDialDraw (tree, MausTauschrsc.flbox, 2, v.r, FALSE);
  169.       |
  170.     MausTauschrsc.fl_shift,
  171.     MausTauschrsc.fl_contrl: 
  172.       GetEntry (tree, floskel, floskel^.oldEntry, floskel^.oldControl);
  173.       isControl := mtUtils.InState (tree, MausTauschrsc.fl_contrl, MagicAES.SELECTED);
  174.       SetEntry (tree, floskel, floskel^.oldEntry, isControl);
  175.       floskel^.oldControl := isControl;
  176.       WinDials.WinDialDraw (tree , MausTauschrsc.flbox, 2, v.r, FALSE);
  177.       |
  178.     MausTauschrsc.flblock:
  179.       IF CatEdit.GetBlock (floskel^.theWdw, FALSE, TRUE, strPtr, strLen)
  180.       THEN
  181.         IF strLen > 512 THEN strPtr^[511] := 0C END;
  182.         CatGlobal.SetStrings (tree, MausTauschrsc.flline1, MausTauschrsc.flline6, strPtr^);
  183.         GetEntry (tree, floskel, floskel^.oldEntry, floskel^.oldControl);
  184.         SetEntry (tree, floskel, floskel^.oldEntry, floskel^.oldControl);
  185.         WinDials.WinDialDraw (tree , MausTauschrsc.flbox, 2, v.r, FALSE);
  186.         DEALLOCATE (strPtr, 0);
  187.         mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  188.         WinDials.WinDialDraw (tree, but, 0, v.r, FALSE);
  189.       END;
  190.       |
  191.     MausTauschrsc.flok,
  192.     MausTauschrsc.flcancel:
  193.       mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  194.       GetEntry (tree, floskel, floskel^.oldEntry, floskel^.oldControl);
  195.       RETURN TRUE; |
  196.   ELSE
  197.   END;
  198.   RETURN FALSE;
  199. END floskelButton;
  200.  
  201. PROCEDURE floskelGetSetValues (tree: ADDRESS; private: ADDRESS; 
  202.                                set: BOOLEAN; exit: INTEGER);
  203.   VAR   floskel : floskelPtr;
  204.         i       : INTEGER;
  205.         found   : BOOLEAN;
  206.         isControl: BOOLEAN;
  207.         str     : ARRAY [0..511] OF CHAR;
  208.         varName : CatTypes.String127;
  209.         but     : INTEGER;
  210. BEGIN
  211.   floskel := private;
  212.   but := INTEGER(BITSET(exit) - {15});
  213.   IF set
  214.   THEN
  215.     FOR i := 1 TO 10 DO 
  216.       buildVarName (cShiftFkey, i, varName);
  217.       ConfVars.GetConfDefStr (varName, floskel^.txtArray^[i], '');
  218.     END;
  219.     mtUtils.SetState (tree, MausTauschrsc.flblock, MagicAES.DISABLED, 
  220.                       ~(CatEdit.IsEditTop (floskel^.theWdw) & 
  221.                         CatEdit.BlockIsMarked (floskel^.theWdw)));
  222.     FOR i := 1 TO 10 DO 
  223.       buildVarName (cCtrlFkey, i, varName);
  224.       ConfVars.GetConfDefStr (varName, floskel^.txtArray^[10+i], '');
  225.     END;
  226.     (* Selektierten Eintrag feststellen *)
  227.     i := MausTauschrsc.fl_f1;
  228.     found := FALSE;
  229.     WHILE ~found & (i <= MausTauschrsc.fl_f10) DO
  230.       found := mtUtils.InState (tree, i, MagicAES.SELECTED);
  231.       IF ~found THEN INC (i); END;
  232.     END;
  233.     isControl := mtUtils.InState (tree, MausTauschrsc.fl_contrl, MagicAES.SELECTED);
  234.     SetEntry (tree, floskel, i, isControl);
  235.     floskel^.oldEntry := i; 
  236.     floskel^.oldControl := isControl;
  237.   ELSE
  238.     IF but = MausTauschrsc.flok
  239.     THEN
  240.       (* Strings abspeichern *)
  241.       FOR i := 1 TO 10 DO 
  242.         buildVarName (cShiftFkey, i, varName);
  243.         IF ConfVars.GetConfigString (varName, str) OR (LENGTH (floskel^.txtArray^[i]) > 0) THEN
  244.           v.bool := ConfVars.SetConfigString (varName, floskel^.txtArray^[i]);
  245.         END;
  246.       END;
  247.       FOR i := 1 TO 10 DO 
  248.         buildVarName (cCtrlFkey, i, varName);
  249.         IF ConfVars.GetConfigString (varName, str) OR (LENGTH (floskel^.txtArray^[10+i]) > 0) THEN
  250.           v.bool := ConfVars.SetConfigString (varName, floskel^.txtArray^[10+i]);
  251.         END;
  252.       END;
  253.     END;
  254.     DEALLOCATE (floskel^.txtArray, 0);
  255.     DISPOSE (floskel);
  256.   END;
  257. END floskelGetSetValues;
  258.  
  259. PROCEDURE doFloskel();
  260.   VAR floskelBox: mtUtils.tObjcTree;
  261.       floskel   : floskelPtr;
  262. BEGIN
  263.   (* vorbereiten *)
  264.   floskelBox := MausTauschrsc.TreeAddr^[MausTauschrsc.floskeln];
  265.   NEW (floskel);
  266.   IF floskel = NIL
  267.   THEN
  268.     MTE.noMemAlert();
  269.     RETURN
  270.   END;
  271.   ALLOCATE (floskel^.txtArray, TSIZE (floskelArray));
  272.   IF floskel^.txtArray = NIL
  273.   THEN
  274.     MTE.noMemAlert();
  275.     DISPOSE (floskel);
  276.     RETURN
  277.   END; 
  278.   floskel^.theWdw := WdwManager.ownTopWindow;
  279.   IF ~WinDials.OpenWinDial (floskelBox, FALSE, 
  280.                             floskelGetSetValues,
  281.                             floskelGetSetValues,
  282.                             floskelButton,
  283.                             WinDials.defDraw,
  284.                             "",
  285.                             floskel)
  286.   THEN
  287.     MTE.noWinDialAlert();
  288.     DEALLOCATE (floskel^.txtArray, 0);
  289.     DISPOSE (floskel);
  290.   END;
  291. END doFloskel;
  292.  
  293. CONST cNotInst    = " Nicht installiert";
  294.  
  295. TYPE ioFiltArray = ARRAY [0..9] OF IoFilter.ioFilterStruct;
  296.     
  297.      ioInfStruct = RECORD
  298.                      filter: POINTER TO ioFiltArray;
  299.                      select   : INTEGER;
  300.                      oldSelect: INTEGER;
  301.                    END;
  302.      ioInfPtr    = POINTER TO ioInfStruct;
  303.  
  304. (* Nicht lokal wegen evtl. C-Portierung *)
  305. PROCEDURE setItems (tree: ADDRESS; pop: ADDRESS; REF filter: IoFilter.ioFilterStruct);
  306.  VAR  str1, str2: CatTypes.String255;
  307.       scrap     : ARRAY [0..10] OF CHAR;
  308.       intVal    : INTEGER;
  309. BEGIN
  310.   WITH filter DO
  311.     intVal := 0;
  312.     IF forMsg THEN
  313.       intVal := 1;
  314.     ELSIF pastOutfile
  315.     THEN
  316.       intVal := 2;
  317.     END;
  318.     VDIUtil.SetXState (tree, MausTauschrsc.iofilttype1, ORD(intVal));
  319.     VDIUtil.SetXString (tree, MausTauschrsc.iofilttype1, pop, ORD(intVal));
  320.     mtUtils.SetFlag  (tree, MausTauschrsc.ioinfile, MagicAES.HIDETREE, forMsg OR pastOutfile);
  321.     mtUtils.SetFlag  (tree, MausTauschrsc.iooutfile, MagicAES.HIDETREE, forMsg OR pastOutfile);
  322.     mtUtils.SetState (tree, MausTauschrsc.ioinfile, MagicAES.SELECTED, forInfile);
  323.     mtUtils.SetState (tree, MausTauschrsc.iooutfile, MagicAES.SELECTED, forOutfile);
  324.     mtUtils.SetFlag (tree, MausTauschrsc.filtcmd2, MagicAES.HIDETREE, forMsg OR pastOutfile);
  325.     mtUtils.SetFlag (tree, MausTauschrsc.filtcmd2, MagicAES.EDITABLE, ~forMsg & ~pastOutfile);
  326.     mtUtils.SetFlag (tree, MausTauschrsc.iofiltcmd2, MagicAES.HIDETREE, forMsg OR pastOutfile);
  327.     mtUtils.SetState (tree, MausTauschrsc.ioactive, MagicAES.SELECTED, activ);
  328.     mtUtils.SetState (tree, MausTauschrsc.iobreak, MagicAES.SELECTED, stopAtErr);
  329.     IF forMsg
  330.     THEN
  331.       mtUtils.SetObjcString (tree, MausTauschrsc.iofiltcmd, 'Kommandozeile fr Messages:');
  332.     ELSIF pastOutfile
  333.     THEN
  334.       mtUtils.SetObjcString (tree, MausTauschrsc.iofiltcmd, 'Kommandozeile nach Einsortieren:');
  335.     ELSE
  336.       mtUtils.SetObjcString (tree, MausTauschrsc.iofiltcmd, 'Kommandozeile fr Infile:');
  337.     END;
  338.     mtUtils.SetObjcString (tree, MausTauschrsc.iofiltname, filtName);
  339.     mtUtils.SetObjcString (tree, MausTauschrsc.filtcmd1, inCmd);
  340.     mtUtils.SetObjcString (tree, MausTauschrsc.filtcmd2, outCmd);
  341.     IF progName[0] # ''
  342.     THEN
  343.       mtDir.SplitPath (progName, str1, str2, scrap);
  344.     ELSE
  345.       MagicStrings.Assign ('leer', str2);
  346.     END;
  347.     mtUtils.SetObjcString (tree, MausTauschrsc.iofiltsel, str2);
  348.   END;
  349. END setItems;
  350.  
  351. PROCEDURE getItems (tree: ADDRESS; VAR filter: IoFilter.ioFilterStruct);
  352.   VAR intVal : INTEGER;
  353. BEGIN
  354.   WITH filter DO
  355.     intVal := VDIUtil.GetXState (tree, MausTauschrsc.iofilttype1);
  356.     forMsg := intVal = 1;
  357.     pastOutfile := intVal = 2;
  358.     forInfile  := mtUtils.InState (tree, MausTauschrsc.ioinfile, MagicAES.SELECTED);
  359.     forOutfile := mtUtils.InState (tree, MausTauschrsc.iooutfile, MagicAES.SELECTED);
  360.     activ := mtUtils.InState (tree, MausTauschrsc.ioactive, MagicAES.SELECTED);
  361.     stopAtErr := mtUtils.InState (tree, MausTauschrsc.iobreak, MagicAES.SELECTED);
  362.     mtUtils.ObjcString (tree, MausTauschrsc.filtcmd1, inCmd);
  363.     mtUtils.ObjcString (tree, MausTauschrsc.filtcmd2, outCmd);
  364.     mtUtils.ObjcString (tree, MausTauschrsc.iofiltname, filtName);
  365.   END;
  366. END getItems;
  367.  
  368. PROCEDURE filterButton (obTree: ADDRESS; private: ADDRESS; button: INTEGER;
  369.                         mx, my : INTEGER; kstate: BITSET; clicks: INTEGER): BOOLEAN;
  370.   VAR ioInfo    : ioInfPtr;
  371.       typeSel,
  372.       x, y,
  373.       but       : INTEGER;
  374.       path,
  375.       name      : CatTypes.String255;
  376.       ext       : ARRAY [0..10] OF CHAR;
  377.       tree      : mtUtils.tObjcTree;
  378.       t         : Trick;
  379.       filtSel   : mtUtils.tObjcTree;
  380.       filtType  : mtUtils.tObjcTree;
  381.       res       : BOOLEAN;
  382. BEGIN
  383.   ioInfo := private;
  384.   tree := obTree;
  385.   filtType  := MausTauschrsc.TreeAddr^[MausTauschrsc.iotype];
  386.   filtSel := MausTauschrsc.TreeAddr^[MausTauschrsc.iofilter];
  387.   (* Button auswerten *)
  388.   but := INTEGER(BITSET(button) - {15});
  389.   CASE but OF
  390.     MausTauschrsc.iofiltok, 
  391.     MausTauschrsc.iofiltquit : 
  392.       IF but = MausTauschrsc.iofiltok
  393.       THEN
  394.         getItems (tree, ioInfo^.filter^[ioInfo^.select]);
  395.       END;
  396.       mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  397.       RETURN TRUE; |
  398.     MausTauschrsc.iofilthelp : 
  399.       CatHelp.DoHelp (CatHelp.iofilter);
  400.       mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  401.       WinDials.WinDialDraw (tree, but, 1, v.r, FALSE); |
  402.     MausTauschrsc.iofiltpop0, 
  403.     MausTauschrsc.iofiltpop1 : 
  404.       but := MausTauschrsc.iofiltpop1;
  405.       getItems (tree, ioInfo^.filter^[ioInfo^.oldSelect]);
  406.       MagicAES.ObjcOffset (tree, but, x, y);
  407.       t := ADR (tree^[but].obState);
  408.       ioInfo^.select := mtPopups.TreePopup (filtSel, x, y, ORD(t^.hi))-1;
  409.       IF ioInfo^.select >= 0 THEN
  410.         t^.hi := CHR(ioInfo^.select);
  411.         VDIUtil.SetXString (tree, but, filtSel, ioInfo^.select);
  412.         setItems (tree, filtType, ioInfo^.filter^[ioInfo^.select]);
  413.         WinDials.WinDialDraw (tree, 0, 8, v.r, FALSE);
  414.         ioInfo^.oldSelect := ioInfo^.select;
  415.       ELSE
  416.         ioInfo^.select := ioInfo^.oldSelect;
  417.       END; |
  418.     MausTauschrsc.iofiltpop2:
  419.       getItems (tree, ioInfo^.filter^[ioInfo^.oldSelect]);
  420.       t := ADR (tree^[but-1].obState);
  421.       t^.hi := CHR((ORD(t^.hi)+1) MOD 10);
  422.       ioInfo^.select := ORD (t^.hi);
  423.       VDIUtil.SetXString (tree, but-1, filtSel, ioInfo^.select);
  424.       setItems (tree, filtType, ioInfo^.filter^[ioInfo^.select]);
  425.       ioInfo^.oldSelect := ioInfo^.select;
  426.       WinDials.WinDialDraw (tree, 0, 8, v.r, FALSE); |
  427.     MausTauschrsc.iofiltsel0, 
  428.     MausTauschrsc.iofiltsel: 
  429.       (* Neues Programm ausw„hlen *)
  430.       IF ioInfo^.filter^[ioInfo^.oldSelect].progName[0] # ''
  431.       THEN
  432.         mtDir.SplitPath (ioInfo^.filter^[ioInfo^.oldSelect].progName, path, name, ext);
  433.       ELSE
  434.         CatGlobal.ApplPath (path);
  435.         name := "";
  436.       END;
  437.       res := CatGlobal.FselGet (path, name, '*.*', 'I/O-Filter ausw„hlen', TRUE);
  438.       (* mtDials.DialForm (tree, mtDials.DENABLE, v.r, v.r);  *)
  439.       IF res
  440.       THEN
  441.         IF name[0] # ''
  442.         THEN
  443.           MagicStrings.Assign (path, ioInfo^.filter^[ioInfo^.oldSelect].progName);
  444.           MagicStrings.Append (name, ioInfo^.filter^[ioInfo^.oldSelect].progName);
  445.           mtUtils.SetObjcString (tree, MausTauschrsc.iofiltsel, name);
  446.           MagicStrings.Insert (' ', name, 0);
  447.           mtUtils.SetObjcString (filtSel, ioInfo^.oldSelect+1, name);
  448.           ioInfo^.filter^[ioInfo^.oldSelect].activ := TRUE;
  449.         ELSE
  450.           MagicStrings.Assign (name, ioInfo^.filter^[ioInfo^.oldSelect].progName);
  451.           mtUtils.SetObjcString (filtSel, ioInfo^.oldSelect+1, cNotInst);
  452.           ioInfo^.filter^[ioInfo^.oldSelect].activ := FALSE;
  453.           setItems (tree, filtType, ioInfo^.filter^[ioInfo^.oldSelect]);
  454.         END;
  455.         VDIUtil.SetXString (tree, MausTauschrsc.iofiltpop1, filtSel, ioInfo^.select);
  456.         WinDials.WinDialDraw (tree, MausTauschrsc.iofiltpop1, 1, v.r, FALSE);
  457.         WinDials.WinDialDraw (tree, MausTauschrsc.iofiltsel, 1, v.r, FALSE);
  458.       END;
  459.       mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  460.       WinDials.WinDialDraw (tree, but, 1, v.r, FALSE); |
  461.     MausTauschrsc.iofilttype0,
  462.     MausTauschrsc.iofilttype1: 
  463.       but := MausTauschrsc.iofilttype1;
  464.       MagicAES.ObjcOffset (tree, but, x, y);
  465.       t := ADR (tree^[but].obState);
  466.       typeSel := mtPopups.TreePopup (filtType, x, y, ORD(t^.hi))-1;
  467.       IF typeSel >= 0 THEN
  468.         t^.hi := CHR(typeSel);
  469.         ioInfo^.filter^[ioInfo^.oldSelect].forMsg := typeSel = 1;
  470.         ioInfo^.filter^[ioInfo^.oldSelect].pastOutfile := typeSel = 2;
  471.         setItems (tree, filtType, ioInfo^.filter^[ioInfo^.oldSelect]);
  472.         WinDials.WinDialDraw (tree, MausTauschrsc.iofiltpop1, 1, v.r, FALSE);
  473.         mtUtils.CalcArea (tree, MausTauschrsc.iofiltback, v.r);
  474.         WinDials.WinDialDraw (tree, 0, 8, v.r, TRUE);
  475.       END; |
  476.     MausTauschrsc.iofilttype2:
  477.       t := ADR (tree^[but-1].obState);
  478.       t^.hi := CHR((ORD(t^.hi)+1) MOD 3);
  479.       typeSel := ORD (t^.hi);
  480.       ioInfo^.filter^[ioInfo^.oldSelect].forMsg := typeSel = 1;
  481.       ioInfo^.filter^[ioInfo^.oldSelect].pastOutfile := typeSel = 2;
  482.       setItems (tree, filtType, ioInfo^.filter^[ioInfo^.oldSelect]);
  483.       (*
  484.       VDIUtil.SetXString (tree, but-1, filtType, typeSel);
  485.       *)
  486.       WinDials.WinDialDraw (tree, MausTauschrsc.iofiltpop1, 1, v.r, FALSE);
  487.       mtUtils.CalcArea (tree, MausTauschrsc.iofiltback, v.r);
  488.       WinDials.WinDialDraw (tree, 0, 8, v.r, TRUE); |
  489.   ELSE
  490.   END;
  491.   RETURN FALSE;
  492. END filterButton;
  493.  
  494. PROCEDURE filterGetSetValues (tree: ADDRESS; private: ADDRESS; 
  495.                               set: BOOLEAN; exit: INTEGER);
  496.  
  497.   VAR ioInfo    : ioInfPtr;
  498.       i         : INTEGER;
  499.       filtSel   : mtUtils.tObjcTree;
  500.       filtType  : mtUtils.tObjcTree;
  501.       path,
  502.       name      : CatTypes.String255;
  503.       ext       : ARRAY [0..10] OF CHAR;
  504.       varname   : CatTypes.String127;
  505.       but       : INTEGER;
  506. BEGIN
  507.   ioInfo := private;
  508.   filtType  := MausTauschrsc.TreeAddr^[MausTauschrsc.iotype];
  509.   filtSel := MausTauschrsc.TreeAddr^[MausTauschrsc.iofilter];
  510.   but := INTEGER(BITSET(exit) - {15});
  511.   IF set
  512.   THEN
  513.     (* Strings einsetzen *)
  514.     FOR i := 1 TO 10 DO
  515.       (* Array fllen 
  516.        *)
  517.       WITH ioInfo^.filter^[i-1] DO
  518.         buildVarName (cIoFilterProg, i, varname);
  519.         IF ConfVars.GetConfigString (varname, progName)
  520.         THEN
  521.           IoFilter.ReadFilter (ioInfo^.filter^[i-1], i);
  522.           (*
  523.           buildVarName (cIoFilterInCmd, i, varname);
  524.           ConfVars.GetConfDefStr (varname, inCmd, "");
  525.           buildVarName (cIoFilterOutCmd, i, varname);
  526.           ConfVars.GetConfDefStr (varname, outCmd, "");
  527.           buildVarName (cIoFilterMsg, i, varname);
  528.           ConfVars.GetConfDefBool (varname, forMsg, FALSE);
  529.           buildVarName (cIoFilterPast, i, varname);
  530.           ConfVars.GetConfDefBool (varname, pastOutfile, FALSE);
  531.           buildVarName (cIoFilterInfile, i, varname);
  532.           ConfVars.GetConfDefBool (varname, forInfile, FALSE);
  533.           buildVarName (cIoFilterOutfile, i, varname);
  534.           ConfVars.GetConfDefBool (varname, forOutfile, FALSE);
  535.           buildVarName (cIoFilterActiv, i, varname);
  536.           ConfVars.GetConfDefBool (varname, activ, TRUE);
  537.           buildVarName (cIoFilterStopAtErr, i, varname);
  538.           ConfVars.GetConfDefBool (varname, stopAtErr, FALSE);
  539.           (* Jetzt Programmnamen extrahieren *)
  540.           buildVarName (cIoFilterName, i, varname);
  541.           ConfVars.GetConfDefStr (varname, filtName, "");
  542.           *)
  543.           IF filtName[0] = ""
  544.           THEN
  545.             mtDir.SplitPath (progName, path, name, ext);
  546.           ELSE
  547.             MagicStrings.Assign (filtName, name);
  548.           END;
  549.           MagicStrings.Insert (' ', name, 0);
  550.           mtUtils.SetObjcString (filtSel, i, name);
  551.         ELSE
  552.           forMsg := FALSE;
  553.           activ  := FALSE;
  554.           stopAtErr := FALSE;
  555.           mtUtils.SetObjcString (filtSel, i, cNotInst);
  556.         END;
  557.       END;
  558.     END;
  559.     ioInfo^.select := 0;
  560.     ioInfo^.oldSelect := ioInfo^.select;
  561.     setItems (tree, filtType, ioInfo^.filter^[ioInfo^.select]);
  562.     (* vorbereiten *)
  563.     VDIUtil.SetXState (tree, MausTauschrsc.iofiltpop1, ioInfo^.select);
  564.     VDIUtil.SetXString (tree, MausTauschrsc.iofiltpop1, filtSel, ioInfo^.select);
  565.   ELSE
  566.     IF but = MausTauschrsc.iofiltok
  567.     THEN
  568.       FOR i := 1 TO 10 DO
  569.         WITH ioInfo^.filter^[i-1] DO
  570.           IF progName[0] # ''
  571.           THEN
  572.             buildVarName (cIoFilterProg, i, varname);
  573.             v.bool := ConfVars.SetConfigString (varname, progName);
  574.             buildVarName (cIoFilterInCmd, i, varname);
  575.             v.bool := ConfVars.SetConfigString (varname, inCmd);
  576.             buildVarName (cIoFilterOutCmd, i, varname);
  577.             v.bool := ConfVars.SetConfigString (varname, outCmd);
  578.             buildVarName (cIoFilterMsg, i, varname);
  579.             v.bool := ConfVars.SetConfigBool (varname, forMsg);
  580.             buildVarName (cIoFilterPast, i, varname);
  581.             v.bool := ConfVars.SetConfigBool (varname, pastOutfile);
  582.             buildVarName (cIoFilterInfile, i, varname);
  583.             v.bool := ConfVars.SetConfigBool (varname, forInfile);
  584.             buildVarName (cIoFilterOutfile, i, varname);
  585.             v.bool := ConfVars.SetConfigBool (varname, forOutfile);
  586.             buildVarName (cIoFilterActiv, i, varname);
  587.             v.bool := ConfVars.SetConfigBool (varname, activ);
  588.             buildVarName (cIoFilterStopAtErr, i, varname);
  589.             v.bool := ConfVars.SetConfigBool (varname, stopAtErr);
  590.             buildVarName (cIoFilterName, i, varname);
  591.             v.bool := ConfVars.SetConfigString (varname, filtName);
  592.           ELSE
  593.             (* Configvariablen l”schen! *)
  594.             buildVarName (cIoFilterProg, i, varname);
  595.             ConfVars.DeleteConfigVar (varname);
  596.             buildVarName (cIoFilterInCmd, i, varname);
  597.             ConfVars.DeleteConfigVar (varname);
  598.             buildVarName (cIoFilterOutCmd, i, varname);
  599.             ConfVars.DeleteConfigVar (varname);
  600.             buildVarName (cIoFilterMsg, i, varname);
  601.             ConfVars.DeleteConfigVar (varname);
  602.             buildVarName (cIoFilterInfile, i, varname);
  603.             ConfVars.DeleteConfigVar (varname);
  604.             buildVarName (cIoFilterOutfile, i, varname);
  605.             ConfVars.DeleteConfigVar (varname);
  606.             buildVarName (cIoFilterPast, i, varname);
  607.             ConfVars.DeleteConfigVar (varname);
  608.             buildVarName (cIoFilterActiv, i, varname);
  609.             ConfVars.DeleteConfigVar (varname);
  610.             buildVarName (cIoFilterStopAtErr, i, varname);
  611.             ConfVars.DeleteConfigVar (varname);
  612.             buildVarName (cIoFilterName, i, varname);
  613.             ConfVars.DeleteConfigVar (varname);
  614.           END;
  615.         END;
  616.       END;
  617.     END;
  618.     DEALLOCATE (ioInfo^.filter, 0);
  619.     DISPOSE (ioInfo);
  620.   END;
  621. END filterGetSetValues;
  622.  
  623. PROCEDURE doIOFilter ();
  624.   VAR filterBox : mtUtils.tObjcTree;
  625.       ioInfo    : ioInfPtr;
  626. BEGIN
  627.   filterBox := MausTauschrsc.TreeAddr^[MausTauschrsc.filefilt];
  628.   NEW (ioInfo);
  629.   IF ioInfo = NIL
  630.   THEN
  631.     MTE.noMemAlert ();
  632.     RETURN
  633.   END;
  634.   ALLOCATE (ioInfo^.filter, TSIZE (ioFiltArray)); 
  635.   IF ioInfo^.filter = NIL 
  636.   THEN 
  637.     DISPOSE (ioInfo);
  638.     MTE.noMemAlert (); 
  639.     RETURN 
  640.   END;
  641.   (* Defaults setzen *)
  642.   Block.Clear (ioInfo^.filter, TSIZE (ioFiltArray));
  643.   IF ~WinDials.OpenWinDial (filterBox, FALSE, 
  644.                             filterGetSetValues,
  645.                             filterGetSetValues,
  646.                             filterButton,
  647.                             WinDials.defDraw,
  648.                             "",
  649.                             ioInfo)
  650.   THEN
  651.     DEALLOCATE (ioInfo^.filter, 0); 
  652.     DISPOSE (ioInfo);
  653.     MTE.noWinDialAlert();
  654.   END;
  655. END doIOFilter;
  656.  
  657.   CONST lowExtern = 9;
  658.         highExtern = 16;
  659.         filtMax    = 16;
  660.         filtExt    = 8;
  661.  
  662. PROCEDURE BuildFilterPopup (VAR filterNumber: INTEGER; VAR filtSel : mtUtils.tObjcTree; 
  663.                             forDial: BOOLEAN);
  664.   VAR i         : INTEGER;
  665.       varname   : CatTypes.String127;
  666.       cmd       : CatTypes.String127;
  667.       filterBox : mtUtils.tObjcTree;
  668.       isDa      : BOOLEAN;
  669. BEGIN
  670.   filterBox := MausTauschrsc.TreeAddr^[MausTauschrsc.filtbox];
  671.   mtUtils.SetObjcString (filterBox, MausTauschrsc.fbcomm, "");
  672.   filtSel := MausTauschrsc.TreeAddr^[MausTauschrsc.filtsel];
  673.   mtUtils.SetObjcString (filterBox, MausTauschrsc.fbcomm, "");
  674.   FOR i := lowExtern TO highExtern DO
  675.     buildVarName (cFilter, i-lowExtern+1, varname);
  676.     isDa := ConfVars.GetConfigString (varname, cmd);
  677.     IF isDa
  678.     THEN
  679.       IF i - 1 = filterNumber
  680.       THEN
  681.         (* String setzen *)
  682.         mtUtils.SetObjcString (filterBox, MausTauschrsc.fbcomm, cmd);
  683.       END;
  684.       MagicStrings.Insert (' ', cmd, 0);
  685.     ELSE
  686.       (* Extern X anlegen *)
  687.       MagicStrings.Assign (' Extern ', cmd);
  688.       MagicStrings.Append (StrConv.IntToStr (i-lowExtern+1, 0), cmd);
  689.     END;
  690.     mtUtils.SetState (filtSel, i, MagicAES.DISABLED, ~isDa & ~forDial);
  691.     mtUtils.SetFlag  (filtSel, i, MagicAES.SELECTABLE, isDa OR forDial);
  692.     mtUtils.SetObjcString (filtSel, i, cmd);
  693.   END;
  694.   IF ShellCall.IsShell() = ShellCall.noShell
  695.   THEN
  696.     FOR i := lowExtern TO highExtern DO
  697.       mtUtils.InclState (filtSel, i, MagicAES.DISABLED);
  698.       mtUtils.ExclFlag (filtSel, i, MagicAES.SELECTABLE);
  699.     END;
  700.   END;
  701. END BuildFilterPopup;
  702.  
  703. TYPE    blockInfo   = RECORD
  704.                         filterNumber    : INTEGER;
  705.                         cmd             : CatTypes.String255;
  706.                         exitBut         : INTEGER;
  707.                         filtSel : mtUtils.tObjcTree;
  708.                       END;
  709.         blockInfoPtr = POINTER TO blockInfo;
  710.         
  711. PROCEDURE blockButton (obTree: ADDRESS; private: ADDRESS; button: INTEGER;
  712.                        mx, my : INTEGER; kstate: BITSET; clicks: INTEGER): BOOLEAN;
  713. VAR infoPtr : blockInfoPtr;
  714.     but     : INTEGER;
  715.     t       : Trick;
  716.     x, y, 
  717.     select  : INTEGER;
  718.     varname : CatTypes.String127;
  719.     tree    : mtUtils.tObjcTree;
  720. BEGIN
  721.   infoPtr := private;
  722.   tree := obTree;
  723.   but := INTEGER(BITSET(button) - {15});
  724.   CASE but OF
  725.     MausTauschrsc.fbok,
  726.     MausTauschrsc.fbquit : 
  727.       mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  728.       RETURN TRUE; |
  729.     MausTauschrsc.fbhelp : 
  730.       CatHelp.DoHelp (CatHelp.filter);
  731.       mtUtils.ExclState (tree, but, MagicAES.SELECTED);
  732.       mtDials.DialDraw (tree, but, 1, v.r, FALSE); |
  733.     MausTauschrsc.fbfilt0,
  734.     MausTauschrsc.fbfilt1:
  735.       but := MausTauschrsc.fbfilt1;
  736.       MagicAES.ObjcOffset (tree, but, x, y);
  737.       t := ADR (tree^[but].obState);
  738.       select := mtPopups.TreePopup (infoPtr^.filtSel, x, y, ORD(t^.hi))-1;
  739.       IF (ShellCall.IsShell() = ShellCall.noShell) & (select >= lowExtern) THEN select := -1 END;
  740.       IF select >= 0 THEN
  741.         t^.hi := CHR(select);
  742.         VDIUtil.SetXString (tree, but, infoPtr^.filtSel, select);
  743.         IF select >= lowExtern-1
  744.         THEN
  745.           buildVarName (cFilter, select-lowExtern+2, varname);
  746.           ConfVars.GetConfDefStr (varname, infoPtr^.cmd, "");
  747.           mtUtils.SetObjcString (tree, MausTauschrsc.fbcomm, infoPtr^.cmd);
  748.         ELSE
  749.           mtUtils.SetObjcString (tree, MausTauschrsc.fbcomm, '');
  750.         END;
  751.         mtDials.DialDraw (tree, MausTauschrsc.fbcomm, 0, v.r, FALSE);
  752.         mtDials.DialDraw (tree, but, 0, v.r, FALSE);
  753.       END; |
  754.     MausTauschrsc.fbfilt2:
  755.       t := ADR (tree^[but-1].obState);
  756.       IF (ShellCall.IsShell() # ShellCall.noShell)
  757.       THEN
  758.         t^.hi := CHR((ORD(t^.hi)+1) MOD filtMax);
  759.       ELSE
  760.         t^.hi := CHR((ORD(t^.hi)+1) MOD (filtMax - filtExt));
  761.       END;
  762.       select := ORD (t^.hi);
  763.       VDIUtil.SetXString (tree, but-1, infoPtr^.filtSel, select);
  764.       IF select >= lowExtern-1
  765.       THEN
  766.         buildVarName (cFilter, select-lowExtern+2, varname);
  767.         ConfVars.GetConfDefStr (varname, infoPtr^.cmd, "");
  768.         mtUtils.SetObjcString (tree, MausTauschrsc.fbcomm, infoPtr^.cmd);
  769.       ELSE
  770.         mtUtils.SetObjcString (tree, MausTauschrsc.fbcomm, '');
  771.       END;
  772.       mtDials.DialDraw (tree, MausTauschrsc.fbcomm, 0, v.r, FALSE);
  773.       mtDials.DialDraw (tree, but-1, 0, v.r, FALSE); |
  774.   ELSE
  775.   END;
  776.   RETURN FALSE;
  777. END blockButton;
  778.  
  779. PROCEDURE blockGetSetValues (tree: ADDRESS; private: ADDRESS; 
  780.                              set: BOOLEAN; exit: INTEGER);
  781. VAR infoPtr : blockInfoPtr;
  782.     varname : CatTypes.String127;
  783. BEGIN
  784.   infoPtr := private;
  785.   infoPtr^.exitBut := INTEGER(BITSET(exit) - {15});
  786.   IF set
  787.   THEN
  788.     BuildFilterPopup (infoPtr^.filterNumber, infoPtr^.filtSel, TRUE);
  789.     (* vorbereiten *)
  790.     VDIUtil.SetXState (tree, MausTauschrsc.fbfilt1, infoPtr^.filterNumber);
  791.     VDIUtil.SetXString (tree, MausTauschrsc.fbfilt1, infoPtr^.filtSel, infoPtr^.filterNumber);
  792.   ELSE
  793.     IF infoPtr^.exitBut = MausTauschrsc.fbok
  794.     THEN
  795.       infoPtr^.filterNumber := VDIUtil.GetXState (tree, MausTauschrsc.fbfilt1);
  796.       IF infoPtr^.filterNumber >= lowExtern-1
  797.       THEN
  798.         (* String auslesen *)
  799.         mtUtils.ObjcString (tree, MausTauschrsc.fbcomm, infoPtr^.cmd);
  800.         Strings.DelLeadingBlanks (infoPtr^.cmd);
  801.         Strings.DelTrailingBlanks (infoPtr^.cmd);
  802.         buildVarName (cFilter, infoPtr^.filterNumber-lowExtern+2, varname);
  803.         IF LENGTH (infoPtr^.cmd) > 0
  804.         THEN
  805.           v.bool := ConfVars.SetConfigString (varname, infoPtr^.cmd);
  806.         ELSE
  807.           ConfVars.DeleteConfigVar (varname);
  808.         END;
  809.       END;
  810.     END; 
  811.   END;
  812. END blockGetSetValues;
  813.  
  814. PROCEDURE doFilter (VAR filterNumber: INTEGER; VAR cmd: ARRAY OF CHAR): BOOLEAN;
  815.   VAR filterBox : mtUtils.tObjcTree;
  816.       infoPtr   : blockInfoPtr;
  817.       result    : BOOLEAN;
  818. BEGIN
  819.   IF filterNumber < 0 THEN filterNumber := 0; END;
  820.   filterBox := MausTauschrsc.TreeAddr^[MausTauschrsc.filtbox];
  821.   NEW (infoPtr);
  822.   IF infoPtr=NIL
  823.   THEN
  824.     MTE.noMemAlert();
  825.     RETURN FALSE;
  826.   END;
  827.   MagicStrings.Assign (cmd, infoPtr^.cmd);
  828.   infoPtr^.filterNumber := filterNumber;
  829.   
  830.   IF ~WinDials.OpenWinDial (filterBox, TRUE, 
  831.                             blockGetSetValues,
  832.                             blockGetSetValues,
  833.                             blockButton,
  834.                             WinDials.defDraw,
  835.                             "",
  836.                             infoPtr)
  837.   THEN
  838.     MTE.noWinDialAlert();
  839.     DISPOSE (infoPtr);
  840.     RETURN FALSE;
  841.   END;
  842.   (* Da wir die Ergebnisse brauchen, mssen wir hier die Eventroutine 
  843.    * aufrufen 
  844.    *)
  845.   WinDials.WinDialHandleEvents();
  846.   
  847.   filterNumber := infoPtr^.filterNumber;
  848.   MagicStrings.Assign (infoPtr^.cmd, cmd);
  849.  
  850.   result := infoPtr^.exitBut = MausTauschrsc.fbok;
  851.   
  852.   DISPOSE (infoPtr);
  853.   
  854.   RETURN result;
  855.   
  856. END doFilter;
  857.  
  858. PROCEDURE doPopupFilter (VAR filterNumber: INTEGER; VAR cmd: ARRAY OF CHAR): BOOLEAN;
  859.   VAR but       : INTEGER;
  860.       filtSel   : mtUtils.tObjcTree;
  861.       varname   : CatTypes.String127;
  862.       x, y      : INTEGER;
  863.       fNumber   : INTEGER;
  864. BEGIN
  865.   IF filterNumber < 0 THEN filterNumber := 0; END;
  866.   BuildFilterPopup (filterNumber, filtSel, FALSE);
  867.   MagicAES.GrafMkstate (x, y, v.bset, v.bset);
  868.   fNumber := mtPopups.TreePopup (filtSel, x, y, 0) - 1;
  869.   IF fNumber >= 0
  870.   THEN
  871.     filterNumber := fNumber;
  872.   END;
  873.   IF fNumber >= lowExtern-1
  874.   THEN
  875.     (* String auslesen *)
  876.     buildVarName (cFilter, fNumber-lowExtern+2, varname);
  877.     IF ConfVars.GetConfigString (varname, cmd)
  878.     THEN
  879.       RETURN TRUE;
  880.     END;
  881.     RETURN FALSE
  882.   END;
  883.   RETURN fNumber >= 0
  884. END doPopupFilter;
  885. (*------------------------------------------------------------------------*)
  886.  
  887. PROCEDURE NrHolen(VAR Nr : ARRAY OF CHAR):BOOLEAN;
  888. VAR exit   : INTEGER;
  889.     str    : CatTypes.String255;
  890.     whichNr: mtUtils.tObjcTree;
  891. BEGIN
  892.   whichNr   := MausTauschrsc.TreeAddr^[MausTauschrsc.whichnr];
  893.   mtUtils.ObjcString(whichNr, MausTauschrsc.nrstring, str);
  894.   exit    := WinDials.WinDialDo (whichNr, 0);
  895.   IF exit = MausTauschrsc.whcancel THEN
  896.     mtUtils.SetObjcString(whichNr, MausTauschrsc.nrstring, str);
  897.     RETURN FALSE
  898.   END;
  899.   mtUtils.ObjcString(whichNr, MausTauschrsc.nrstring, Nr);
  900.   RETURN TRUE;
  901. END NrHolen;
  902.  
  903. PROCEDURE DatumHolen(forWv: BOOLEAN; VAR Nr : ARRAY OF CHAR):BOOLEAN;
  904. CONST   wvTitle     = "Wiedervorlage am";
  905.         abrufTitle  = "Abrufen ab Datum";
  906.         
  907. VAR exit   : INTEGER;
  908.     saveStr, str    : ARRAY[0..10] OF CHAR;
  909.     ok : BOOLEAN;
  910.     dateein: mtUtils.tObjcTree;
  911. BEGIN
  912.   dateein   := MausTauschrsc.TreeAddr^[MausTauschrsc.datumein];
  913.   IF forWv
  914.   THEN
  915.     mtUtils.SetObjcString (dateein, MausTauschrsc.dtitle, wvTitle);
  916.   ELSE
  917.     mtUtils.SetObjcString (dateein, MausTauschrsc.dtitle, abrufTitle);
  918.   END;
  919.   mtUtils.ObjcString(dateein, MausTauschrsc.ddate, saveStr);
  920.   REPEAT
  921.     ok := FALSE;
  922.     exit    := WinDials.WinDialDo (dateein, 0);
  923.     IF exit = MausTauschrsc.dateok THEN
  924.       mtUtils.ObjcString(dateein, MausTauschrsc.ddate, str);
  925.       ok := ConvertDate.DateOk(str);
  926.       IF ~ok THEN
  927.         MTE.info ('[1][CAT:|Kein bekanntes|Datumsformat.][[Ok]')
  928.       END;
  929.     END;
  930.   UNTIL (exit = MausTauschrsc.dcancel) OR ok;
  931.   IF exit = MausTauschrsc.dcancel THEN
  932.     mtUtils.SetObjcString(dateein, MausTauschrsc.ddate, saveStr);
  933.     RETURN FALSE
  934.   END;
  935.   mtUtils.ObjcString(dateein, MausTauschrsc.ddate, Nr);
  936.   RETURN TRUE;
  937. END DatumHolen;
  938.  
  939. PROCEDURE GetUser(VAR on : BOOLEAN; VAR name : ARRAY OF CHAR):BOOLEAN;
  940. VAR oldName : ARRAY[0..79] OF CHAR;
  941.     chefStr : ARRAY [0..9] OF CHAR;
  942.     k       : CARDINAL;
  943.     j       : INTEGER;
  944.     cGroup  : CARDINAL;
  945.     gruppen : mtUtils.tObjcTree;
  946.     getuser : mtUtils.tObjcTree;
  947.     grinWdw : INTEGER;
  948. BEGIN
  949.   gruppen   := MausTauschrsc.TreeAddr^[MausTauschrsc.gruppen];
  950.   getuser   := MausTauschrsc.TreeAddr^[MausTauschrsc.getuser];
  951.   grin.GetGrinTopWdw (grinWdw);
  952.   grin.ActualFrom (grinWdw, oldName);
  953.   cGroup := grin.ActualGroupNr (grinWdw);
  954.   mtUtils.SetState(getuser, MausTauschrsc.useron, MagicAES.SELECTED, cGroup = dataSys.private);
  955.   mtUtils.SetState(getuser, MausTauschrsc.useroff, MagicAES.SELECTED, cGroup # dataSys.private);
  956.   mtUtils.SetObjcString(getuser, MausTauschrsc.guserstr, oldName);
  957.   REPEAT
  958.     j := WinDials.WinDialDo (getuser, 0);
  959.  
  960.     mtUtils.ObjcString(getuser, MausTauschrsc.guserstr, name);
  961.     IF (j # MausTauschrsc.userabru) & (name[0] = 0C) THEN
  962.       MTE.info (MTE.emptyEName)
  963.     END;
  964.   UNTIL (j = MausTauschrsc.userabru) OR (name[0] # 0C);
  965.   IF j # MausTauschrsc.userabru THEN
  966.     mtUtils.ObjcString(getuser, MausTauschrsc.guserstr, name);
  967.     on := mtUtils.InState(getuser, MausTauschrsc.useron, MagicAES.SELECTED);
  968.     grin.ActualReceiver (grinWdw, oldName);
  969.     MagicStrings.CAPS (oldName);
  970.     MagicStrings.Copy (oldName, 0, 4, chefStr);
  971.     IF MagicStrings.Equal (chefStr, 'CHEF')
  972.     THEN
  973.       MagicStrings.Delete (oldName, 0, 5);
  974.       k := MagicStrings.Pos ('@', oldName, 0, FALSE);
  975.       IF k < LENGTH (oldName) THEN 
  976.         MagicStrings.Delete (oldName, k, LENGTH (oldName) - k+1);
  977.       END;
  978.       mtUtils.SetObjcString (gruppen, MausTauschrsc.newgroup, oldName);
  979.       ListHelp.SetLastGroup (oldName);
  980.     END;
  981.     RETURN TRUE;
  982.   ELSE
  983.     mtUtils.SetObjcString(getuser, MausTauschrsc.guserstr, oldName);
  984.     RETURN FALSE;
  985.   END;
  986. END GetUser;
  987.  
  988. PROCEDURE DoUserSelect();
  989. VAR cmd  : CatTypes.String255;
  990.     on   : BOOLEAN;
  991.     grStr: CatTypes.String255;
  992.     out  : INTEGER;
  993.     ap   : ARRAY[0..1] OF CHAR;
  994. BEGIN
  995.   MagicStrings.Assign ("", grStr);
  996.   IF GetUser(on, cmd) & ListHelp.SelectGroup(grStr, v.card, TRUE, FALSE, FALSE, ListHelp.gsmUser) & 
  997.      (~MagicStrings.Equal (grStr, dataSys.personalName)) THEN
  998.     out := CatFiles.OpenFile(MTPaths.MessagePath, 'grselect.inf', CatFiles.writeFile);
  999.     IF out < 0 THEN
  1000.       MTE.info (MTE.changeNoSave);
  1001.     ELSE
  1002.       CatFiles.Seek(0, out, CatFiles.end);
  1003.     END;
  1004.     IF out > 0 THEN
  1005.       MagicStrings.Insert(':GU', cmd, 0);
  1006.       IF on THEN ap := '>' ELSE ap := '<' END;
  1007.       MagicStrings.Append(ap, cmd);
  1008.       MagicStrings.Append(grStr, cmd);
  1009.       CatFiles.WriteMuch(LONG(MagicStrings.Length(cmd)), out, ADR(cmd));
  1010.       CatFiles.WriteFile(CR, out); 
  1011.       CatFiles.WriteFile(LF, out);
  1012.       CatFiles.CloseFile(out);
  1013.     END;
  1014.   END
  1015. END DoUserSelect;
  1016.  
  1017.  
  1018. END CatOpts2.
  1019.